<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>

</body>

</html>
<script>
  // entries() 方法返回一个新的Array Iterator对象，该对象包含数组中每个索引的键/值对。
  // 返回值
  // 一个新的 Array 迭代器对象。Array Iterator是对象，它的原型（__proto__:Array Iterator）上有一个next方法，可用用于遍历迭代器取得原数组的[key,value]。
  var arr = ["a", "b", "c"];
  // const iterator1 = arr.entries();
  // console.log(iterator1.next().value);
  // // [0, "a"]
  // console.log(iterator1.next().value);
  // // [1, "b"]
  // console.log(iterator1.next().value);
  // // [2, "c"]
  // console.log(iterator1.next().value);
  // undefined

  // ======================================================================
  // var iterator = arr.entries();
  // console.log(iterator.next());
  /*{value: Array(2), done: false}
          done:false
          value:(2) [0, "a"]
           __proto__: Object
*/
  // iterator.next()返回一个对象，对于有元素的数组，
  // 是next{ value: Array(2), done: false }；
  // next.done 用于指示迭代器是否完成：在每次迭代时进行更新而且都是false，
  // 直到迭代器结束done才是true。
  // next.value是一个["key","value"]的数组，是返回的迭代器中的元素值。

  // =============================================================================
  // var iter = arr.entries();
  // var a = [];
  // // for(var i=0; i< arr.length; i++){   // 实际使用的是这个 
  // for (var i = 0; i < arr.length + 1; i++) {    // 注意，是length+1，比数组的长度大
  //   var tem = iter.next();             // 每次迭代时更新next
  //   console.log(tem.done);             // 这里可以看到更新后的done都是false
  //   if (tem.done !== true) {             // 遍历迭代器结束done才是true
  //     console.log(tem.value);
  //     a[i] = tem.value;
  //   }
  // }

  // console.log(a);                         // 遍历完毕，输出next.value的数组
  // [[0,a],[1,b],[2,c]]

  // ================================================================================
  // 二维数组按行排序
  // function sortArr(arr) {
  //   var goNext = true;
  //   var entries = arr.entries();
  //   while (goNext) {
  //     var result = entries.next();
  //     if (result.done !== true) {
  //       console.log(result.value)
  //       result.value[1].sort((a, b) => a - b);
  //       goNext = true;
  //     } else {
  //       goNext = false;
  //     }
  //   }
  //   return arr;
  // }
  // var arr = [[1, 34], [456, 2, 3, 44, 234], [4567, 1, 4, 5, 6], [34, 78, 23, 1]];
  // console.log(sortArr(arr))
  /*(4) [Array(2), Array(5), Array(5), Array(4)]
    0:(2) [1, 34]
    1:(5) [2, 3, 44, 234, 456]
    2:(5) [1, 4, 5, 6, 4567]
    3:(4) [1, 23, 34, 78]
    length:4
    __proto__:Array(0)
*/

  // ====================================================================================
  // 使用for…of 循环
  var arr = ["a", "b", "c"];
  var iterator = arr.entries();
  // undefined
  for (let e of iterator) {
    console.log(e);
  }

// [0, "a"] 
// [1, "b"] 
// [2, "c"]
</script>